å ç¢ãªReactã¢ããªã±ãŒã·ã§ã³ã®ããã®ãšã©ãŒå¢çãç¿åŸãåªé ãªå埩ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹åäžã®ããã®ã€ã³ããªãžã§ã³ããªãšã©ãŒåŠçæŠç¥ãå®è£ ããã¹ããã©ã¯ãã£ã¹ãé«åºŠãªãã¯ããã¯ãåœéçãªèæ ®äºé ãåŠã³ãŸãã
Reactãšã©ãŒå¢çã®å埩æŠç¥ïŒã€ã³ããªãžã§ã³ããªãšã©ãŒåŠç
çŸä»£ã®Webéçºã®ãã€ãããã¯ãªç¶æ³ã«ãããŠãå ç¢ã§å埩åã®ããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšã¯æãéèŠã§ãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããããã«åºãæ¡çšãããŠããJavaScriptã©ã€ãã©ãªã§ããReactã¯ããšã©ãŒã管çããããã®åŒ·åãªã¡ã«ããºã ã§ãããšã©ãŒå¢çïŒError BoundariesïŒãæäŸããŸããããããåã«ãšã©ãŒå¢çãå®è£ ããã ãã§ã¯ååã§ã¯ãããŸããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãçã«åäžãããã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ãç¶æããããã«ã¯ãæç¢ºã«å®çŸ©ãããå埩æŠç¥ãäžå¯æ¬ ã§ãããã®å æ¬çãªã¬ã€ãã§ã¯ãReactãšã©ãŒå¢çã䜿çšããã€ã³ããªãžã§ã³ããªãšã©ãŒåŠçãã¯ããã¯ã«ã€ããŠæ·±ãæãäžãããã¹ããã©ã¯ãã£ã¹ãé«åºŠãªã·ããªãªãããã³ã°ããŒãã«ãªèªè ãžã®èæ ®äºé ãç¶²çŸ ããŸãã
Reactãšã©ãŒå¢çã®çè§£
ãšã©ãŒå¢çã¯ãåã³ã³ããŒãã³ãããªãŒå ã®JavaScriptãšã©ãŒãã©ãã§ããã£ãããããããã®ãšã©ãŒããã°ã«èšé²ããã³ã³ããŒãã³ãããªãŒå šäœãã¯ã©ãã·ã¥ãã代ããã«ãã©ãŒã«ããã¯UIã衚瀺ããReactã³ã³ããŒãã³ãã§ãããããã¯å®å šç¶²ãšããŠæ©èœãã壿» çãªé害ãé²ããããåªé ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
äž»èŠãªæŠå¿µïŒ
- ç®çïŒ UIã®ç¹å®ã®éšåå ã§ãšã©ãŒãåé¢ããããããäŒæããŠã¢ããªã±ãŒã·ã§ã³å šäœãã¯ã©ãã·ã¥ãããã®ãé²ããŸãã
- å®è£
ïŒ ãšã©ãŒå¢çã¯ã
static getDerivedStateFromError()ããã³componentDidCatch()ã©ã€ããµã€ã¯ã«ã¡ãœãããå®çŸ©ããã¯ã©ã¹ã³ã³ããŒãã³ãã§ãã - ã¹ã³ãŒãïŒ ãããã¯ãã¬ã³ããªã³ã°äžãã©ã€ããµã€ã¯ã«ã¡ãœããå ãããã³ãããããäžã«ããããªãŒå šäœã®ã³ã³ã¹ãã©ã¯ã¿ãŒå ã§ãšã©ãŒããã£ããããŸããã€ãã³ããã³ãã©ãŒå ã®ãšã©ãŒã¯ãã£ããããŸããã
åºæ¬çãªäŸïŒ
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// Update state so the next render will show the fallback UI.
return { hasError: true };
}
componentDidCatch(error, errorInfo) {
// You can also log the error to an error reporting service
logErrorToMyService(error, errorInfo);
}
render() {
if (this.state.hasError) {
// You can render any custom fallback UI
return <h1>Something went wrong.</h1>;
}
return this.props.children;
}
}
ã€ã³ããªãžã§ã³ããªãšã©ãŒå埩æŠç¥ã®éçº
ãšã©ãŒå¢çã¯ã¯ã©ãã·ã¥ãé²ããŸãããææ ®æ·±ãå埩æŠç¥ãšçµã¿åãããå Žåã«æã广çã§ããããã«ã¯ããšã©ãŒããã£ããããã ãã§ãªãããŠãŒã¶ãŒãå ã«é²ãããã®å®è¡å¯èœãªãªãã·ã§ã³ãæäŸããããšãå«ãŸããŸããã€ã³ããªãžã§ã³ããªæŠç¥ã§ã¯ããšã©ãŒã®çš®é¡ãçºçããã³ã³ããã¹ããããã³ãŠãŒã¶ãŒã®æœåšçãªæ¬¡ã®ã¹ããããèæ ®ããŸãã
1. ãšã©ãŒã®åé¡ãšåªå é äœä»ã
ãã¹ãŠã®ãšã©ãŒãåãããã«äœæãããããã§ã¯ãããŸãããäžéšã¯éèŠã§ãããå³åº§ã®æ³šæãå¿ èŠã§ããããã®ä»ã¯è»œåŸ®ã§ãããããåªé ã«åŠçã§ããŸãããšã©ãŒãåé¡ããããšã¯ãéçºã®åŽåãåªå é äœä»ãããããã«å¿ããŠãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã調æŽããã®ã«åœ¹ç«ã¡ãŸãã
- é倧ãªãšã©ãŒïŒ ãããã®ãšã©ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ã¢æ©èœãæ£ããåäœããã®ã劚ããŸããäŸãšããŠã¯ãå¿ é ããŒã¿ã®APIãªã¯ãšã¹ãã®å€±æãããŒã¿ããŒã¹æ¥ç¶ãšã©ãŒããŸãã¯é倧ãªã³ã³ããŒãã³ãã¬ã³ããªã³ã°ã®å€±æãªã©ããããŸãã
- éé倧ãªãšã©ãŒïŒ ãããã®ãšã©ãŒã¯ç¹å®ã®æ©èœã«åœ±é¿ããŸãããã¢ããªã±ãŒã·ã§ã³å šäœã®æ©èœãæãªãããšã¯ãããŸãããäŸãšããŠã¯ããªãã·ã§ã³ã®ãã©ãŒã ããªããŒã·ã§ã³ã®ãšã©ãŒãéèŠã§ã¯ãªãUIèŠçŽ ã®åé¡ããŸãã¯äºæ¬¡çãªã³ã³ãã³ãã®èªã¿èŸŒã¿ã®åé¡ãªã©ããããŸãã
- äžæçãªãšã©ãŒïŒ ãããã¯äžæçãªãšã©ãŒã§ãããå詊è¡ã§è§£æ±ºãããå¯èœæ§ãé«ãã§ããäŸãšããŠã¯ããããã¯ãŒã¯ã®äžå ·åãäžæçãªAPIé害ããŸãã¯æç¶çãªãµãŒããŒã®åé¡ãªã©ããããŸãã
2. ç²åºŠã®é«ããšã©ãŒå¢çã®å®è£
ã¢ããªã±ãŒã·ã§ã³å šäœãåäžã®ãšã©ãŒå¢çã§ã©ããããããšã¯é¿ããŠãã ããã代ããã«ãç¹å®ã®ã³ã³ããŒãã³ããŸãã¯UIã®ã»ã¯ã·ã§ã³ã®åšãã«è€æ°ã®å°ããªãšã©ãŒå¢çã䜿çšããŸããããã«ãããããã¿ãŒã²ãããçµã£ããšã©ãŒåŠçãå¯èœã«ãªããåäžã®ãšã©ãŒãã¢ããªã±ãŒã·ã§ã³ã®ç¡é¢ä¿ãªéšåã«åœ±é¿ãäžããã®ãé²ããŸãã
<ErrorBoundary>
<ComponentA />
</ErrorBoundary>
<ErrorBoundary>
<ComponentB />
</ErrorBoundary>
ãã®ã¢ãããŒãã«ãããComponentAã§ãšã©ãŒãçºçããå Žåã§ããComponentBã¯åœ±é¿ãåãããã¢ããªã±ãŒã·ã§ã³ã®ãã®ã»ã¯ã·ã§ã³ã§ã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãç¶æãããŸãã
3. ã³ã³ããã¹ãã«å¿ãããã©ãŒã«ããã¯UIã®æäŸ
ãšã©ãŒå¢çã«ãã£ãŠè¡šç€ºããããã©ãŒã«ããã¯UIã¯ããŠãŒã¶ãŒã«åœ¹ç«ã€æ å ±ãšå®è¡å¯èœãªãªãã·ã§ã³ãæäŸããå¿ èŠããããŸãããäœããééã£ãŠããŸããã®ãããªäžè¬çãªãšã©ãŒã¡ãã»ãŒãžã¯é¿ããŠãã ããã代ããã«ãã³ã³ããã¹ãã«åãããã¬ã€ãã³ã¹ãæäŸããŸãã
- æ å ±æäŸã¡ãã»ãŒãžïŒ ãŠãŒã¶ãŒãã¬ã³ããªãŒãªæ¹æ³ã§äœãåé¡ã§ãã£ãããæç¢ºã«èª¬æããŸããæè¡çãªå°éçšèªã¯é¿ããŠãã ããã
- å®è¡å¯èœãªãªãã·ã§ã³ïŒ æäœã®å詊è¡ãããŒãžã®æŽæ°ããµããŒããžã®é£çµ¡ãªã©ãåé¡è§£æ±ºã®ããã®ææ¡ãæäŸããŸãã
- ã³ã³ããã¹ãã®ç¶æïŒ å¯èœã§ããã°ããŠãŒã¶ãŒã®çŸåšã®ç¶æ ãç¶æãããããšã©ãŒãçºçããåã®å Žæã«æ»ããããã«ããŸãã
äŸïŒããšã©ãŒãçºçããŸãããã®ä»£ããã«ãã補å詳现ã®èªã¿èŸŒã¿ã«å€±æããŸãããã€ã³ã¿ãŒãããæ¥ç¶ã確èªããŠãããäžåºŠã詊ããã ããã[å詊è¡]ãã®ãããªã¡ãã»ãŒãžã衚瀺ããŸãã
4. å詊è¡ã¡ã«ããºã ã®å®è£
äžæçãªãšã©ãŒã«å¯ŸããŠã¯ãèªåãŸãã¯ãŠãŒã¶ãŒãããªã¬ãŒããå詊è¡ã¡ã«ããºã ãå®è£ ããŸããããã«ãããå€ãã®å ŽåããŠãŒã¶ãŒãããã«ã¢ã¯ã·ã§ã³ãåãããšãªãåé¡ã解決ãããŸãã
- èªåå詊è¡ïŒ çãé å»¶ã®åŸã«å€±æãããªã¯ãšã¹ããèªåçã«å詊è¡ããã¡ã«ããºã ãå®è£ ããŸãããµãŒããŒã«éè² è·ããããªãããã«ãææ°é¢æ°çããã¯ãªãã䜿çšããŸãã
- ãŠãŒã¶ãŒãããªã¬ãŒããå詊è¡ïŒ ãã©ãŒã«ããã¯UIã«ããŠãŒã¶ãŒãæåã§æäœãå詊è¡ã§ãããã¿ã³ãŸãã¯ãªã³ã¯ãæäŸããŸãã
// Example of a retry mechanism
function retryOperation(operation, maxRetries = 3, delay = 1000) {
return new Promise((resolve, reject) => {
operation()
.then(resolve)
.catch((error) => {
if (maxRetries > 0) {
console.log(`Retrying operation in ${delay}ms...`);
setTimeout(() => {
retryOperation(operation, maxRetries - 1, delay * 2)
.then(resolve)
.catch(reject);
}, delay);
} else {
reject(error);
}
});
});
}
// Usage with fetch API
retryOperation(() => fetch('/api/data'))
.then(data => console.log('Data fetched:', data))
.catch(error => console.error('Failed to fetch data after retries:', error));
5. ãšã©ãŒã®ãã®ã³ã°ãšç£èŠ
å æ¬çãªãšã©ãŒãã®ã³ã°ã¯ãã¢ããªã±ãŒã·ã§ã³ã®åé¡ãç¹å®ãã察åŠããããã«äžå¯æ¬ ã§ããå ç¢ãªãšã©ãŒã¬ããŒããµãŒãã¹ã䜿çšããŠããªã¢ã«ã¿ã€ã ã§ãšã©ãŒããã£ããã£ããåæããŸãã
- ãšã©ãŒè©³çްã®ãã£ããã£ïŒ ãšã©ãŒã¡ãã»ãŒãžãã¹ã¿ãã¯ãã¬ãŒã¹ãããã³é¢é£ããã³ã³ããã¹ãæ å ±ããã°ã«èšé²ããŸãã
- ãŠãŒã¶ãŒèå¥ïŒ å¯èœã§ããã°ãç¹å®ã®ãšã©ãŒãç¹å®ã®ãŠãŒã¶ãŒã«é¢é£ä»ããŠãããŸããŸãªãŠãŒã¶ãŒã»ã°ã¡ã³ããžã®åœ±é¿ãçè§£ããŸãããã©ã€ãã·ãŒèŠå¶ïŒäŸïŒGDPRãCCPAïŒã«çæããŠãã ããã
- ãªã¢ã«ã¿ã€ã ç£èŠïŒ ãšã©ãŒçãç£èŠãããã¿ãŒã³ãç¹å®ããŠãæœåšçãªåé¡ã«ããã¢ã¯ãã£ãã«å¯ŸåŠããŸãã
SentryãRollbarãBugsnagãªã©ã®äººæ°ã®ãããšã©ãŒã¬ããŒããµãŒãã¹ããããŸãããããã®ãµãŒãã¹ã¯ã詳现ãªãšã©ãŒã¬ããŒããããã·ã¥ããŒããããã³ã¢ã©ãŒãæ©èœãæäŸããŸãã
6. åªé ãªå£åïŒGraceful DegradationïŒ
å Žåã«ãã£ãŠã¯ããšã©ãŒããå®å šã«å埩ã§ããªãããšããããŸãããã®ãããªç¶æ³ã§ã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãžã®åœ±é¿ãæå°éã«æããããã«ãåªé ãªå£åãå®è£ ããŸããããã«ã¯ã圱é¿ãåããæ©èœãç¡å¹ã«ããããããã·ã³ãã«ãªä»£æ¿æ©èœã«çœ®ãæããããšãå«ãŸããŸãã
äŸïŒ APIãšã©ãŒã®ããã«ãããã³ã³ããŒãã³ãã®èªã¿èŸŒã¿ã«å€±æããå Žåãããã鿢ç»åãšãµãŒãããŒãã£ã®ãããã³ã°ãµãŒãã¹ãžã®ãªã³ã¯ã«çœ®ãæããŸãã
7. ãŠãŒã¶ãŒãã£ãŒãããã¯ã¡ã«ããºã
ãŠãŒã¶ãŒããšã©ãŒãå ±åãããããã£ãŒãããã¯ãæäŸãããããæ¹æ³ãæäŸããŸããããã¯ããšã©ãŒãã®ã³ã°ã·ã¹ãã ã«ãã£ãŠèªåçã«ãã£ããã£ãããªãåé¡ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
- ãã£ãŒãããã¯ãã©ãŒã ïŒ ãšã©ãŒããŒãžã«ç°¡åãªãã£ãŒãããã¯ãã©ãŒã ãå«ãããŠãŒã¶ãŒãééããåé¡ã説æã§ããããã«ããŸãã
- ãµããŒããžã®é£çµ¡ïŒ ãµããŒãããã¥ã¡ã³ããŸãã¯é£çµ¡å æ å ±ãžã®ãªã³ã¯ãæäŸããŸãã
é«åºŠãªãšã©ãŒåŠçãã¯ããã¯
1. æ¡ä»¶ä»ããšã©ãŒå¢ç
ç¹å®ã®æ¡ä»¶ã«åºã¥ããŠãšã©ãŒå¢çãåçã«ã¬ã³ããªã³ã°ããŸããããã«ãããããŸããŸãªç¶æ³ã«åãããŠãšã©ãŒåŠçã®åäœã調æŽã§ããŸãã
{isFeatureEnabled ? (
<ErrorBoundary>
<FeatureComponent />
</ErrorBoundary>
) : (
<FallbackComponent />
)}
2. 髿¬¡ã³ã³ããŒãã³ãïŒHOCïŒãšããŠã®ãšã©ãŒå¢ç
åå©çšå¯èœãªãšã©ãŒå¢çHOCãäœæããŠãè€æ°ã®ã³ã³ããŒãã³ãããšã©ãŒåŠçæ©èœã§ç°¡åã«ã©ããããŸãã
const withErrorBoundary = (WrappedComponent) => {
return class WithErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
return { hasError: true };
}
componentDidCatch(error, errorInfo) {
console.error('Error caught by HOC:', error, errorInfo);
}
render() {
if (this.state.hasError) {
return <p>An error occurred in this component.</p>;
}
return <WrappedComponent {...this.props} />; // Pass all props down
}
};
};
// Usage
const EnhancedComponent = withErrorBoundary(MyComponent);
3. ãµãŒããŒãµã€ãã¬ã³ããªã³ã°ïŒSSRïŒã§ã®ãšã©ãŒå¢çã®äœ¿çš
SSRã§ã®ãšã©ãŒåŠçã¯ããµãŒããŒã§ã®åæã¬ã³ããªã³ã°ããã»ã¹äžã«ãšã©ãŒãçºçããå¯èœæ§ããããããæ
éãªèæ
®ãå¿
èŠã§ãããšã©ãŒå¢çããšã©ãŒãé©åã«ãã£ãããããµãŒããŒãµã€ãã®ã¯ã©ãã·ã¥ãé²ãããã«æ£ããæ§æãããŠããããšã確èªããŠãã ãããSSRã§ã®èªã¿èŸŒã¿ãšãšã©ãŒã®ç®¡çãæ¯æŽããã³ãŒãåå²ã®ããã«ãReact Loadableã®ãããªã©ã€ãã©ãªã®äœ¿çšãæ€èšããŠãã ããã
4. ã«ã¹ã¿ã ãšã©ãŒåŠçããžãã¯
componentDidCatch()ã¡ãœããå
ã«ã«ã¹ã¿ã ãšã©ãŒåŠçããžãã¯ãå®è£
ããŠããšã©ãŒã®çš®é¡ã«åºã¥ããŠç¹å®ã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸããããã«ã¯ãã«ã¹ã¿ã ãšã©ãŒã¡ãã»ãŒãžã®è¡šç€ºããŠãŒã¶ãŒã®å¥ã®ããŒãžãžã®ãªãã€ã¬ã¯ãããŸãã¯ä»ã®ã€ãã³ãã®ããªã¬ãŒãå«ãŸããŸãã
componentDidCatch(error, errorInfo) {
if (error instanceof SpecificError) {
// Handle the specific error
this.setState({ customErrorMessage: 'A specific error occurred.' });
} else {
// Handle other errors
this.setState({ genericErrorMessage: 'An unexpected error occurred.' });
}
logErrorToMyService(error, errorInfo);
}
ãšã©ãŒåŠçã«é¢ããåœéçãªèæ ®äºé
ã°ããŒãã«ãªãŠãŒã¶ãŒã察象ãšããã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåããšã©ãŒåŠçæŠç¥ãèšèšããéã«åœéåïŒi18nïŒãšããŒã«ãªãŒãŒã·ã§ã³ïŒl10nïŒãèæ ®ããããšãéèŠã§ãã
1. ããŒã«ã©ã€ãºããããšã©ãŒã¡ãã»ãŒãž
ãšã©ãŒã¡ãã»ãŒãžããŠãŒã¶ãŒã®åžæããèšèªã«ç¿»èš³ããŠããŠãŒã¶ãŒãåé¡ãçè§£ããé©åãªã¢ã¯ã·ã§ã³ãå®è¡ã§ããããã«ããŸããreact-i18nextãlinguiJSãªã©ã®i18nã©ã€ãã©ãªã䜿çšããŠç¿»èš³ã管çããŸãã
// Example using react-i18next
import { useTranslation } from 'react-i18next';
function MyComponent() {
const { t } = useTranslation();
return (
<p>{t('error.message')}</p>
);
}
2. æåçãªé æ ®
ãšã©ãŒã¡ãã»ãŒãžããã©ãŒã«ããã¯UIãèšèšããéã«ã¯ãæåçãªéãã«çæããŠãã ãããç¹å®ã®æåã§äžå¿«ãŸãã¯äžé©åãšèŠãªãããå¯èœæ§ã®ããèšèãç»åã®äœ¿çšã¯é¿ããŠãã ããã
3. ã¿ã€ã ãŸãŒã³ãšæ¥ä»åœ¢åŒ
ãšã©ãŒããã°ã«èšé²ããéã¯ãã¿ã€ã ã¹ã¿ã³ããé©åã«ãã©ãŒãããããããŠãŒã¶ãŒã®ããŒã«ã«ã¿ã€ã ãŸãŒã³ã«å€æãããŠããããšã確èªããŠãã ãããmoment.jsãdate-fnsãªã©ã®ã©ã€ãã©ãªã䜿çšããŠã¿ã€ã ãŸãŒã³ãåŠçããŸãã
4. éè²šãšæ°å€åœ¢åŒ
ã¢ããªã±ãŒã·ã§ã³ã財åããŒã¿ã衚瀺ããå Žåãé貚èšå·ãšæ°å€åœ¢åŒããŠãŒã¶ãŒã®å°åã«åãããŠããŒã«ã©ã€ãºãããŠããããšã確èªããŠãã ãããnumeral.jsãçµã¿èŸŒã¿ã®Intl.NumberFormat APIãªã©ã®ã©ã€ãã©ãªã䜿çšããŸãã
5. å³ããå·ŠïŒRTLïŒã®ãµããŒã
ã¢ããªã±ãŒã·ã§ã³ãå³ããå·Šã«èšè¿°ãããèšèªïŒäŸïŒã¢ã©ãã¢èªãããã©ã€èªïŒããµããŒãããŠããå Žåããšã©ãŒã¡ãã»ãŒãžãšãã©ãŒã«ããã¯UIãRTLã¬ã€ã¢ãŠãã«åãããŠé©åã«é 眮ãããŠããããšã確èªããŠãã ããã
Reactãšã©ãŒå¢çå埩ã®ããã®ãã¹ããã©ã¯ãã£ã¹
- ãšã©ãŒå¢çã®ãã¹ãïŒ ãšã©ãŒãã·ãã¥ã¬ãŒãããŠãå¢çããããããã£ãããããã©ãŒã«ããã¯UIãæ£ããã¬ã³ããªã³ã°ããŠããããšã確èªããŸãã
- ãšã©ãŒåŠçæŠç¥ã®ææžåïŒ äºæããããšã©ãŒãšæãŸãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®èšé²ãä¿æããéçºè ãç¶æããã³æŽæ°ããããããã«ããŸãã
- ãšã©ãŒçã®ç¶ç¶çãªç£èŠïŒ ãšã©ãŒçã远跡ããã·ã¹ãã ãå®è£ ãããŠãŒã¶ãŒã«åœ±é¿ãäžããåã«åé¡ãè¿ éã«ç¹å®ããŠå¯ŸåŠã§ããããã«ããŸãã
- å¢çãå°ããéäžãããïŒ ã¢ããªã±ãŒã·ã§ã³ã®å€§éšåãåäžã®å¢çã§ã©ããããããšã¯é¿ããŠãã ãããããã«ãããç¹å®ã®åé¡ãé èœãããããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
- ãšã©ãŒå¢çã宿çã«æŽæ°ããïŒ ã¢ããªã±ãŒã·ã§ã³ã®é²åã«åãããŠå¢çãèŠçŽããæ°ããã³ã³ããŒãã³ããæ©èœãåæ ããããã«æŽæ°ããŸãã
çµè«
Reactãšã©ãŒå¢çã¯ãå ç¢ã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åŒ·åãªããŒã«ã§ãããšã©ãŒã®åé¡ãã³ã³ããã¹ãã«å¿ãããã©ãŒã«ããã¯UIãå詊è¡ã¡ã«ããºã ãããã³åœéçãªèæ ®äºé ãèæ ®ããã€ã³ããªãžã§ã³ããªãšã©ãŒå埩æŠç¥ãå®è£ ããããšã§ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå€§å¹ ã«åäžãããã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ãç¶æã§ããŸãããšã©ãŒçãç¶ç¶çã«ç£èŠããã¢ããªã±ãŒã·ã§ã³ã®é²åã«åãããŠæŠç¥ãé©å¿ãããããšãå¿ããªãã§ãã ããããã®ã¬ã€ãã§æŠèª¬ãããŠãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãã°ããŒãã«ãªãŠãŒã¶ãŒãå ç¢ã§ä¿¡é Œæ§ãé«ããæ¥œãã䜿çšã§ããReactã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã
ããã¢ã¯ãã£ãã§æç¢ºã«å®çŸ©ããããšã©ãŒåŠçã¢ãããŒããæ¡çšããããšã§ãæœåšçãªã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ãã·ã¥ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãžã®ã³ãããã¡ã³ãã瀺ããã°ããŒãã«ãªãŠãŒã¶ãŒããŒã¹ãšã®ä¿¡é Œãç¯ãæ©äŒã«å€ããããšãã§ããŸããããã§è°è«ãããååã¯ã广çã«å®è£ ãããå ŽåãReactã¢ããªã±ãŒã·ã§ã³å šäœã®åè³ªãšæç¶å¯èœæ§ã«å€§ããè²¢ç®ããŸãã